package com.spsa.vista.controladores;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;

import com.spsa.excepciones.ServicioException;
import com.spsa.negocio.gestores.GestorUsuarios;
import com.spsa.negocio.utilidades.SingletonDatos;
import com.spsa.persistencia.entidades.Usuario;
import com.spsa.vista.utilidades.MensajesJSF;

@ManagedBean(name = "backUsuarios")
@ViewScoped
public class ControladorUsuarios {
	@EJB
	private SingletonDatos singletonDatos;
	private List<Usuario> usuarios;
	@EJB
	private GestorUsuarios gestorUsuarios;
	private Usuario usuarioActual;
	
	@PostConstruct
	public void inicializar() {
		cargarDatosUsuarios();
	}
	
	public void abrirDialogoRegistrar() {
		abrirDialogo(null);
	}
	
	private void abrirDialogo(Usuario usuario) {
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usuario", usuario);
		
		Map<String, Object> options = new HashMap<String, Object>();
		options.put("modal", true);
		options.put("draggable", false);
		options.put("resizable", false);
		options.put("closable", false);
		options.put("contentHeight", 440);
		options.put("contentWidth", 420);
		RequestContext.getCurrentInstance().openDialog("crudUsuarios", options, null);
	}
	
	public void registrarUsuario(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Usuario usuario = (Usuario) event.getObject();
		
		try {
			gestorUsuarios.registrar(usuario);
			cargarDatosUsuarios();
			MensajesJSF.mostrarMensaje("Registrar usuario", "Se registro el usuario");
		}
		catch(ServicioException e) {
			MensajesJSF.mostrarError("Registrar usuario", e.getMessage());
		}
	}
	
	public void abrirDialogoModificar(Usuario usuario) {
		abrirDialogo(usuario);
	}
	
	public void modificarUsuario(SelectEvent event) {
		if (event.getObject() == null)
			return;

		Usuario usuario = (Usuario) event.getObject();
		
		try {
			gestorUsuarios.actualizar(usuario);
			cargarDatosUsuarios();
			MensajesJSF.mostrarMensaje("Actualizar usuario", "Se actualizo los datos del usuario");
		}
		catch(ServicioException e) {
			cargarDatosUsuarios();
			MensajesJSF.mostrarError("Actualizar usuario", e.getMessage());
		}
	}
	
	public void eliminarUsuario() {
		try {
			gestorUsuarios.eliminar(usuarioActual);
			cargarDatosUsuarios();
			MensajesJSF.mostrarMensaje("Eliminar usuario", "Se elimino el usuario");
		}
		catch(ServicioException e) {
			MensajesJSF.mostrarError("Eliminar usuario", e.getMessage());
		}
	}
	
	private void cargarDatosUsuarios() {
		usuarios = singletonDatos.getUsuarios();
	}

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Usuario getUsuarioActual() {
		return usuarioActual;
	}

	public void setUsuarioActual(Usuario usuarioActual) {
		this.usuarioActual = usuarioActual;
	}
}
